package com.tarena.emqx.producer;

import lombok.extern.slf4j.Slf4j;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

//希望 这个生产者可以按照我们的需求 发送消息到 emqx
//可以在项目业务层注入producer调用
@Component
@Slf4j
public class MyProducer {
    //注入配置类创建的mqtt
    @Autowired
    private MqttClient client;
    @Autowired private MqttClient mqttClient;

    //创建发送消息的方法
    /**
     * @param topic 指向emqx中某个主题 主题不一样业务就不同
     * @param message 测试方法 就是向主题中发送的消息数据 消息体
     * @return boolean 表示发送成功还是失败
     */
    public Boolean sendMessage(String topic,String message){
        Boolean success=false;
        //使用try catch 捕获异常 明确一下发送结果 打印日志
        try{
            String msg="我是第一条消息 你好 emqx";
            //调用publish发送消息 qos是3个默认的存储消息的通道序号 0,1,2 消费默认使用0
            //retain 消息是否在emqx中持久化
            mqttClient.publish(topic,msg.getBytes(),0,true);
            success=true;
        }catch (MqttException e){
            //发送消息失败,日志警告
            log.error("给EMQX发送消息失败,topic:{},消息体:{}",topic,message,e);
        }
        return success;
    }
}
